//package org.example;
//
//import org.locationtech.proj4j.*;
//
//public class Main {
//    // 定义要转换的坐标（经度、纬度）
//    ProjCoordinate sourceCoord = new ProjCoordinate(120.0, 30.0);
//    // 示例坐标
//    ProjCoordinate destCoord = new ProjCoordinate();
//    // 创建投影坐标系
//    CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84;
//    // WGS84坐标系
//    CoordinateReferenceSystem targetCRS = createTargetCRS();
//
//    public static void main(String[] args) {
//        Main mainInstance = new Main();
//        // 转换坐标
//        try {
//            CoordinateTransform transform = new BasicCoordinateTransform(mainInstance.sourceCRS, mainInstance.targetCRS);
//            transform.transform(mainInstance.sourceCoord, mainInstance.destCoord);
//            System.out.println("转换后的坐标: " + mainInstance.destCoord.x + ", " + mainInstance.destCoord.y);
//        } catch (Proj4jException e) {
//            System.err.println("坐标转换失败: " + e.getMessage());
//        }
//    }
//
//    private static CoordinateReferenceSystem createTargetCRS() {
//        // 此函数创建一个目标坐标系，具体实现依赖于你的需求 //
//        //TODO: Add actual target CRS creation logic based on your requirements
//        CRSFactory crsFactory = new CRSFactory();
//        return crsFactory.createFromName("EPSG:3857");
//        // 返回null，说明需要实现具体的目标坐标系
//    }
//}
/*package org.example;

import org.locationtech.proj4j.*;

public class Main {
    // 定义要转换的坐标（经度、纬度）
    ProjCoordinate sourceCoord = new ProjCoordinate(120.0, 30.0);
    // 示例坐标
    ProjCoordinate destCoord = new ProjCoordinate();
    // 创建投影坐标系
    CoordinateReferenceSystem sourceCRS;
    // WGS84坐标系
    CoordinateReferenceSystem targetCRS = createTargetCRS();

    public Main() {
        // 初始化sourceCRS为WGS84
        this.sourceCRS = createWGS84CRS();
    }

    public static void main(String[] args) {
        Main mainInstance = new Main();
        // 转换坐标
        try {
            CoordinateTransform transform = new BasicCoordinateTransform(mainInstance.sourceCRS, mainInstance.targetCRS);
            transform.transform(mainInstance.sourceCoord, mainInstance.destCoord);
            System.out.println("转换后的坐标: " + mainInstance.destCoord.x + ", " + mainInstance.destCoord.y);
        } catch (Proj4jException e) {
            System.err.println("坐标转换失败: " + e.getMessage());
            e.printStackTrace();
        }
    }

    private static CoordinateReferenceSystem createWGS84CRS() {
        // 使用参数创建WGS84地理坐标系
        CRSFactory crsFactory = new CRSFactory();
        return crsFactory.createFromParameters("WGS84", "+proj=longlat +datum=WGS84 +no_defs");
    }

    private static CoordinateReferenceSystem createTargetCRS() {
        // 使用参数创建Web Mercator投影坐标系 (EPSG:3857)
        CRSFactory crsFactory = new CRSFactory();
        return crsFactory.createFromParameters("EPSG:3857", "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs");
    }
}*/
package org.example;
import org.locationtech.proj4j.*;

public class Main {
    public static void main(String[] args) {
        try {
            // 1. 保留原有两种坐标系创建方式，新增对象判空校验（避免空指针）
            CRSFactory crsFactory = new CRSFactory();
            // 方式1：通过 EPSG 名称创建
//            CoordinateReferenceSystem WGS84 = crsFactory.createFromName("epsg:4326");
//            CoordinateReferenceSystem UTM = crsFactory.createFromName("epsg:25833");

            // 方式2：通过 PROJ.4 字符串创建（保留，作为备用）
             CoordinateReferenceSystem WGS84 = crsFactory.createFromParameters("WGS84",
                     "+proj=longlat +datum=WGS84 +no_defs");
             CoordinateReferenceSystem UTM = crsFactory.createFromParameters("UTM",
                     "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");

            // 2. 保留坐标转换工厂与转换对象，新增转换前参数校验
            CoordinateTransformFactory ctFactory = new CoordinateTransformFactory();
            CoordinateTransform wgsToUtm = ctFactory.createTransform(WGS84, UTM);

            // 3. 新增示例坐标（可替换为实际需要转换的经纬度），补充范围校验
            double targetLon = 15.0; // 示例经度（UTM 33N 带范围：12°E-18°E）
            double targetLat = 50.0; // 示例纬度（UTM 北半球范围：0°N-84°N）
            // 校验经纬度是否在 UTM 33N 有效范围内（避免转换结果异常）
            if (targetLon < 12 || targetLon > 18 || targetLat < 0 || targetLat > 84) {
                System.out.println("警告：当前经纬度不在 UTM 33N 有效范围（12°E-18°E，0°N-84°N），转换结果可能异常！");
            }

            // 4. 保留原有转换逻辑，新增结果打印（直观展示转换前后数据）
            ProjCoordinate result = new ProjCoordinate();
            wgsToUtm.transform(new ProjCoordinate(targetLon, targetLat), result);

            // 打印转换结果（单位：WGS84为度，UTM为米）
            System.out.println("转换前 WGS84 坐标：经度=" + targetLon + "°，纬度=" + targetLat + "°");
            System.out.println("转换后 UTM 33N 坐标：X=" + result.x + "m，Y=" + result.y + "m");

        } catch (Exception e) {
            // 新增异常信息细化（便于定位问题，如EPSG代码错误、坐标超范围等）
            System.err.println("坐标转换失败：" + e.getMessage());
            e.printStackTrace();
        }
    }
}